package com.wang.spring.lifecycle.b_jsr250;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * 这个是用来测试 Bean声明周期的规范的
 */
public class JSR250AnnoApplication {

    public static void main(String[] args) {
//        test1();
        test2();


    }

    private static void test1() {
        System.out.println("IOC 容器准备初始化");
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext("com.wang.spring.lifecycle.b_jsr250");
        System.out.println("IOC 容器初始化 完成");
        System.out.println("IOC 容器准备 销毁");
        ctx.close();
        System.out.println("IOC 容器销毁 完成");
    }

    /**
     *
     * IOC 容器准备初始化
     * pen2 初始化，构造方法
     * @PostConstruct 开始执行 加墨水
     * init-method 打开钢笔
     * IOC 容器初始化 完成
     * IOC 容器准备 销毁
     * @PreDestroy 销毁 导出墨水
     * destroy-method 合上钢笔
     * IOC 容器销毁 完成
     *
     * 这个是打印的结果，结果我们可以看出 JSR250标准的优先级，要高于 spring的 init 和destroy方法
     */
    private static void test2() {
        System.out.println("IOC 容器准备初始化");
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(JSR250Configuration.class);
        System.out.println("IOC 容器初始化 完成");
        System.out.println("IOC 容器准备 销毁");
        ctx.close();
        System.out.println("IOC 容器销毁 完成");
    }
}
